package Thread;

/**
 * 线程的创建
 */

class MyThread extends Thread{
    //此处Thread类可以直接使用,不需要导入任何的包,Java.lang中的都可以直接使用
    @Override
    public void run(){
        while(true) {
            System.out.println("hello thread");

            //循环中加入休眠操作,让循环每循环一次休息一会,避免CPU消耗过大
            try {
                Thread.sleep(1000);//参数为时间,单位为毫秒
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            /*
            正常来说有两个选项,1.增加throw,网上抛
                            2.,try catch

                            此处是重写父类的run,
                            父类run没有throws这样的异常说明,子类重写的时候也就不能增加throw
             */

            //这里写的代码就是即将创建出的线程,要执行的逻辑
        }
    }
}

public class Demo1 {
    //调用main方法的线程,称为主线程,一个进程,至少有一个线程,这个线程就是主线程(main)
    public static void main(String[] args){
        MyThread t = new MyThread();
        //创建线程
        t.start();//此时,又重新创建了一个新线程,主线程和新线程就会并发/并行的在CPU上执行
        //调用start就会在进程内部创建一个新的线程.新的线程就会执行run中的代码

        //run不会创建线程,也是在主线程中执行逻辑
        //t.run();


        while (true) {
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }

    }

}

/**
 * 创建自己的线程
 */
class myThread extends Thread{
    @Override
    public void run(){
        while(true){
            System.out.println("程序开始运行");

            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}

/**
 * 用自己实现的线程创建线程
 */
class demo1{
    public static void main(String[] args) throws InterruptedException {
        myThread thread = new myThread();
        thread.start();//这个是最初的线程

        //下面的是主线程
        while(true){
            System.out.println("主线程开始运行");

            Thread.sleep(1000);
        }
    }
}